package com.bintree;

import java.util.ArrayList;
import java.util.List;

public class BinTree {
	
	private BinTree leftBinTree ;
	private BinTree rightBinTree ;
	private BinTree root ; 
	private List<BinTree> list ; //所有节点
	private Object data;
	
	public BinTree() {
		
	}
	
	public BinTree(Object data) {
		this(null , null ,data );
	}
	public BinTree(BinTree left , BinTree right , Object data) {
		this.leftBinTree = left ; 
		this.rightBinTree = right ; 
		this.data = data ;
	}
	
	public void createTree(Object[] datas) {
		list = new ArrayList<BinTree>();
		for (Object o : datas ) {
			list.add(new BinTree(o));
		}
		root = list.get(0);
		for (int i = 0 ; i < (datas.length / 2) ; i++) {
			list.get(i).leftBinTree = list.get((i * 2) + 1);
			if (((i * 2) + 2) < list.size()) {
				list.get(i).rightBinTree = list.get((i*2) + 2);
			}
		}
		
	}
	
	
	public void visit(Object o) {
		System.out.println(o+" ");
	}
	//先序遍历
	public void pre(BinTree root) {
		if (root != null ) {
		visit(root.getData());
		pre(root.leftBinTree);
		pre(root.rightBinTree);
		}
	}
	
	public static void main(String[] args) {
		
		BinTree binTree = new BinTree();
		Object[] objects = {1,2,3,7,8,9};
		binTree.createTree(objects);
		binTree.pre(binTree.getRoot());
	}

	public BinTree getLeftBinTree() {
		return leftBinTree;
	}

	public void setLeftBinTree(BinTree leftBinTree) {
		this.leftBinTree = leftBinTree;
	}

	public BinTree getRightBinTree() {
		return rightBinTree;
	}

	public void setRightBinTree(BinTree rightBinTree) {
		this.rightBinTree = rightBinTree;
	}

	public BinTree getRoot() {
		return root;
	}

	public void setRoot(BinTree root) {
		this.root = root;
	}

	public List<BinTree> getList() {
		return list;
	}

	public void setList(List<BinTree> list) {
		this.list = list;
	}

	public Object getData() {
		return data;
	}

	public void setData(Object data) {
		this.data = data;
	}
	
}
